<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Peephole Definitions (GNU Compiler Collection (GCC) Internals)</title>

<meta name="description" content="Peephole Definitions (GNU Compiler Collection (GCC) Internals)">
<meta name="keywords" content="Peephole Definitions (GNU Compiler Collection (GCC) Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Machine-Desc.html#Machine-Desc" rel="up" title="Machine Desc">
<link href="define_005fpeephole.html#define_005fpeephole" rel="next" title="define_peephole">
<link href="Including-Patterns.html#Including-Patterns" rel="prev" title="Including Patterns">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="Peephole-Definitions"></a>
<div class="header">
<p>
Next: <a href="Insn-Attributes.html#Insn-Attributes" accesskey="n" rel="next">Insn Attributes</a>, Previous: <a href="Including-Patterns.html#Including-Patterns" accesskey="p" rel="prev">Including Patterns</a>, Up: <a href="Machine-Desc.html#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Machine_002dSpecific-Peephole-Optimizers"></a>
<h3 class="section">17.18 Machine-Specific Peephole Optimizers</h3>
<a name="index-peephole-optimizer-definitions"></a>
<a name="index-defining-peephole-optimizers"></a>

<p>In addition to instruction patterns the <samp>md</samp> file may contain
definitions of machine-specific peephole optimizations.
</p>
<p>The combiner does not notice certain peephole optimizations when the data
flow in the program does not suggest that it should try them.  For example,
sometimes two consecutive insns related in purpose can be combined even
though the second one does not appear to use a register computed in the
first one.  A machine-specific peephole optimizer can detect such
opportunities.
</p>
<p>There are two forms of peephole definitions that may be used.  The
original <code>define_peephole</code> is run at assembly output time to
match insns and substitute assembly text.  Use of <code>define_peephole</code>
is deprecated.
</p>
<p>A newer <code>define_peephole2</code> matches insns and substitutes new
insns.  The <code>peephole2</code> pass is run after register allocation
but before scheduling, which may result in much better code for
targets that do scheduling.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="define_005fpeephole.html#define_005fpeephole" accesskey="1">define_peephole</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">RTL to Text Peephole Optimizers
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="define_005fpeephole2.html#define_005fpeephole2" accesskey="2">define_peephole2</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">RTL to RTL Peephole Optimizers
</td></tr>
</table>




</body>
</html>
